home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_1
/
cubic
< prev
next >
Wrap
Text File
|
1995-03-31
|
4KB
|
117 lines
Article 4740 of comp.sys.handhelds:
Path: en.ecn.purdue.edu!noose.ecn.purdue.edu!samsung!sdd.hp.com!elroy.jpl.nasa.gov!decwrl!pa.dec.com!shlump.nac.dec.com!jareth.enet.dec.com!edp
From: edp@jareth.enet.dec.com (Eric Postpischil (Always mount a scratch monkey.))
Newsgroups: comp.sys.handhelds
Subject: Cubic and quartic polynomials
Message-ID: <20700@shlump.nac.dec.com>
Date: 4 Mar 91 16:16:38 GMT
Sender: newsdaemon@shlump.nac.dec.com
Reply-To: edp@jareth.enet.dec.com (Eric Postpischil (Always mount a scratch monkey.))
Organization: Digital Equipment Corporation
Lines: 102
Here are routines CUBIC and QUARTIC which solve cubic and quartic equations,
similar to the way that the QUAD function solves quadratic equations. The
use for both is the same as QUAD:
'symbolic1' 'global' -> 'symbolic2'
These routines are also similar to QUAD in that they compute a Taylor's series
of the appropriate degree (courtesy of PCOEF, previously posted by William
C. Wickes) and honor the principal values flag (-1).
The solutions are the exact algebraic solutions, so they will find complex
roots and duplicate roots. The routines ABC and ABCD are for internal use but
might be usable anyway -- they take three or four coefficients, as in a, b, and
c of x^3+a*x^2+b*x+c or a, b, c, and d for the quartic, and return the solution
as an expression. If you enter A B C D ABCD, you will get an algebraic that
represents the general solution for quartic equations. It's 3,153 bytes and
takes thousands more to display. (I only had 10Kb free; that wasn't enough to
hold the algebraic and display it.)
The programs N1 and S12 will take the general solution of a cubic or quartic,
respectively, and substitute the three or four combinations of values for the
n1 or s1 and s2 variables, returning the general solution and the three or
four specific solutions to the stack.
-- edp (Eric Postpischil)
"Always mount a scratch monkey."
%%HP: T(3)A(D)F(.);
DIR
CUBIC
\<< \-> var \<<
EQ\-> - var 3 PCOEF LIST\-> DROP \-> a b c d \<<
var b a / c a / d a / PQR =
\>>
\>> \>>
QUARTIC
\<< \-> var \<<
EQ\-> - var 4 PCOEF LIST\-> DROP \-> a b c d e \<<
var b a / c a / d a / e a / ABCD =
\>>
\>> \>>
PQR
\<< \-> p q r \<<
q p SQ 3 / - 2 p 3 ^ * 9 p * q * - 27 / r + OVER -3 / \v/ 2 *
ABM p 3 / -
\>> \>>
ABM
\<< \-> a b m \<<
3 b * a m * / 'COS(ABM)' = 'ABM' ISOL EQ\-> SWAP DROP
{ 's1*&A' '&A' } \|^MATCH DROP 3 / COS m *
\>> \>>
ABCD
\<< RCLF \-> a b c d f \<<
b NEG a c * 4 d * - 4 b * d * a SQ d * - c SQ - -1 SF PQR f STOF
\-> y \<< y b - a SQ 4 / + \v/ \-> R \<<
3 a SQ * 4 / R SQ - 2 b * -
R 0 \=/
4 a * b * 8 c * - a 3 ^ - 4 R * /
y SQ 4 d * - \v/ 2 *
IFTE
DUP2 + \v/ 2 / 3 ROLLD - \v/ 2 /
\-> D E \<<
a -4 / R 2 / IF -1 FC? THEN 's1' * END +
IF -1 FC? THEN 's1>0' ELSE 1 END
D E IFTE
IF -1 FC? THEN 's2' * END +
\>>
\>> \>>
\>> \>>
PCOEF
\<<
3 DUPN TYPE SWAP TYPE ROT
TYPE 3 \->LIST { 0 6 9 }
IF ==
THEN DUP 1 + \-> n
\<< #18CEAh SYSEVAL
SWAP
#549CCh SYSEVAL
#74D0h SYSEVAL
#59373h SYSEVAL
DROP #7497h SYSEVAL
1 n
FOR m m ROLL COLCT
NEXT
n \->LIST
\>>
END
\>>
N1
\<<
DUP { n1 0 } | OVER { n1 1 } | 3 PICK { n1 2 } |
\>>
S12
\<<
DUP { s1 1 s2 1 } |
OVER { s1 1 s2 -1 } |
3 PICK { s1 -1 s2 1 } |
4 PICK { s1 -1 s2 -1 } |
\>>
END